//
// Created by jinling on 2025/6/24.
//
//定时任务类

#pragma once
#include <cstdint>
#include  <functional>
#include <memory>
#include "TTime.h"

namespace  tmms
{
    namespace  base
    {
        class Task;
        using TaskPtr = std::shared_ptr<Task>;//这里的using 是C++中的类型别名定义
        using TaskCallback = std::function<void(const TaskPtr&)>; //这是是 返回void类型 参数是TaskPtr& 函数对象
        //using 的语法类似于变量赋值（别名 = 类型) 对比// typedef (复杂类型可读性差)--typedef std::function<void(const TaskPtr&)> TaskCallback;
        class Task:public  std::enable_shared_from_this<Task> // 可以支持将类本身变为智能指针
        {
        public:
            Task(const TaskCallback &cb,int64_t interval); // 左值构造函数
            Task(const TaskCallback &&cb,int64_t interval); //右值构造函数，会快很多---一般用的Lambda就是右值
            void Run();
            void Restart();
            int64_t When() const;
        private:
            int64_t interval_{0};//区间的意思
            int64_t when_{0};
            TaskCallback cb_;
        };
    }
}
